home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / AppInstall / CoreMenu.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  6.8 KB  |  195 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import xdg.Menu as xdg
  5. import sys
  6. import os
  7. import pickle
  8. import glob
  9. from Util import *
  10. from gettext import gettext as _
  11.  
  12. class CoreApplicationMenu(object):
  13.     '''This class provides basic menu handling that is required to
  14.        initialize the app-install cache'''
  15.     debug = 0
  16.     
  17.     def __init__(self, datadir):
  18.         self.menudir = datadir + '/desktop'
  19.         self.desktopEntriesSeen = set()
  20.         self.pkg_to_app = { }
  21.         self.pickle = { }
  22.         self.popcon_max = 10
  23.  
  24.     
  25.     def createMenuCache(self, targetdir, fname = 'menu.p'):
  26.         self.desktopEntriesSeen.clear()
  27.         self.pkg_to_app.clear()
  28.         for mpath in glob.glob(os.path.join(self.menudir, '*.menu')):
  29.             menu = xdg.Menu.parse(mpath)
  30.             self._populateFromEntry(menu)
  31.         
  32.         pickle.dump(self.pickle, open('%s/%s' % (targetdir, fname), 'w'), 2)
  33.  
  34.     
  35.     def _populateFromEntry(self, node, parent = None, progress = None):
  36.         for entry in node.getEntries(hidden = True):
  37.             self._dbg(2, 'entry: %s' % entry)
  38.             if isinstance(entry, xdg.Menu.Menu):
  39.                 name = xmlescape(entry.getName())
  40.                 self._dbg(1, 'we have a sub-menu %s ' % name)
  41.                 item = Category(self, name, entry.getIcon())
  42.                 self.pickle[item] = []
  43.                 self._populateFromEntry(entry, item, progress = progress)
  44.                 continue
  45.             if isinstance(entry, xdg.Menu.MenuEntry):
  46.                 self._dbg(3, node.getPath() + '/\t' + entry.DesktopFileID + '\t' + entry.DesktopEntry.getFileName())
  47.                 name = xmlescape(entry.DesktopEntry.getName())
  48.                 self._dbg(1, 'we have a application %s (%s) ' % (name, entry.DesktopFileID))
  49.                 if name and entry.DesktopEntry.hasKey('X-AppInstall-Package'):
  50.                     self._dbg(2, 'parent is %s' % parent.name)
  51.                     if entry.DesktopFileID in self.desktopEntriesSeen:
  52.                         continue
  53.                     
  54.                     self.desktopEntriesSeen.add(entry.DesktopFileID)
  55.                     item = Application(name)
  56.                     item.desktop_entry = entry.DesktopEntry
  57.                     pkgname = entry.DesktopEntry.get('X-AppInstall-Package')
  58.                     item.pkgname = pkgname
  59.                     item.component = entry.DesktopEntry.get('X-AppInstall-Section')
  60.                     supported = entry.DesktopEntry.get('X-AppInstall-Supported')
  61.                     if supported != '':
  62.                         item.supported = bool(supported)
  63.                     elif item.component == 'main' or item.component == 'restricted':
  64.                         item.supported = True
  65.                     
  66.                     if item.component == 'main' or item.component == 'universe':
  67.                         item.free = True
  68.                     else:
  69.                         item.free = False
  70.                     item.channel = entry.DesktopEntry.get('X-AppInstall-Channel')
  71.                     item.isv = entry.DesktopEntry.get('X-AppInstall-ISV')
  72.                     thirdparty = entry.DesktopEntry.get('X-AppInstall-Proprietary')
  73.                     if thirdparty != '':
  74.                         item.thirdparty = bool(thirdparty)
  75.                         item.licenseUri = entry.DesktopEntry.get('X-AppInstall-LicenseUri')
  76.                     
  77.                     archs = entry.DesktopEntry.get('X-AppInstall-Architectures', list = True)
  78.                     if archs:
  79.                         item.architectures.extend(archs)
  80.                     
  81.                     replaces = entry.DesktopEntry.get('X-AppInstall-Replaces', list = True)
  82.                     if replaces:
  83.                         item.replaces = replaces
  84.                     
  85.                     if not entry.DesktopEntry.get('X-AppInstall-Icon', '') and entry.DesktopEntry.getIcon():
  86.                         pass
  87.                     item.iconname = 'applications-other'
  88.                     if item.iconname.endswith('.png') and item.iconname.endswith('.xpm') or item.iconname.endswith('.svg'):
  89.                         item.iconname = item.iconname[:-4]
  90.                     
  91.                     item.comment = entry.DesktopEntry.getComment()
  92.                     item.mime = entry.DesktopEntry.get('MimeType', list = True)
  93.                     item.codecs = entry.DesktopEntry.get('X-AppInstall-Codecs').split(';')
  94.                     item.patentBadness = entry.DesktopEntry.get('X-AppInstall-PatentBadness', type = 'boolean')
  95.                     item.onTop = entry.DesktopEntry.get('X-AppInstall-AlwaysOnTop', type = 'boolean')
  96.                     popcon_str = entry.DesktopEntry.get('X-AppInstall-Popcon')
  97.                     if popcon_str != '':
  98.                         popcon = int(popcon_str)
  99.                         item.popcon = popcon
  100.                         if popcon > self.popcon_max:
  101.                             self.popcon_max = popcon
  102.                         
  103.                     
  104.                     item.execCmd = entry.DesktopEntry.getExec()
  105.                     item.needsTerminal = entry.DesktopEntry.getTerminal()
  106.                     if 'Settings' not in entry.DesktopEntry.getCategories():
  107.                         item.menupath = [
  108.                             _('Applications'),
  109.                             parent.name]
  110.                     else:
  111.                         item.menupath = None
  112.                     self.pickle[parent].append(item)
  113.                 elif name:
  114.                     
  115.                     try:
  116.                         print 'Skipped %s: not associated with a package' % entry
  117.                     except UnicodeEncodeError:
  118.                         pass
  119.                     except:
  120.                         None<EXCEPTION MATCH>UnicodeEncodeError
  121.                     
  122.  
  123.                 None<EXCEPTION MATCH>UnicodeEncodeError
  124.                 
  125.                 try:
  126.                     print 'Skipped %s: does not include a menu name' % entry
  127.                 except UnicodeEncodeError:
  128.                     pass
  129.                 except:
  130.                     None<EXCEPTION MATCH>UnicodeEncodeError
  131.                 
  132.  
  133.             None<EXCEPTION MATCH>UnicodeEncodeError
  134.             if isinstance(entry, xdg.Menu.Header):
  135.                 print 'got header'
  136.                 continue
  137.         
  138.  
  139.     
  140.     def _dbg(self, level, msg):
  141.         '''Write debugging output to sys.stderr.'''
  142.         if level <= self.debug:
  143.             print >>sys.stderr, msg
  144.         
  145.  
  146.  
  147.  
  148. class MenuItem(object):
  149.     ''' base class for a object in the menu '''
  150.     
  151.     def __init__(self, name, iconname = 'applications-other'):
  152.         self.name = name
  153.         self.iconname = iconname
  154.         self.icontheme = None
  155.  
  156.     
  157.     def __repr__(self):
  158.         return 'MenuItem: %s' % self.name
  159.  
  160.  
  161.  
  162. class Category(MenuItem):
  163.     ''' represents a category '''
  164.     
  165.     def __init__(self, parent, name, iconname = 'applications-other'):
  166.         MenuItem.__init__(self, name, iconname)
  167.  
  168.  
  169.  
  170. class Application(MenuItem):
  171.     ''' this class represents a application '''
  172.     
  173.     def __init__(self, name, iconname = 'applications-other'):
  174.         MenuItem.__init__(self, name, iconname)
  175.         self.pkgname = None
  176.         self.comment = ''
  177.         self.mime = None
  178.         self.execCmd = None
  179.         self.needsTerminal = False
  180.         self.component = None
  181.         self.channel = None
  182.         self.isv = None
  183.         self.popcon = 1
  184.         self.rank = 1
  185.         self.onTop = False
  186.         self.free = False
  187.         self.licenseUri = None
  188.         self.supported = False
  189.         self.thirdparty = False
  190.         self.architectures = []
  191.         self.menupath = ''
  192.         self.toInstall = None
  193.  
  194.  
  195.